//
//  SQLiteManager.swift
//  82-FMDB
//
//  Created by Apple on 16/8/3.
//  Copyright © 2016年 Apple. All rights reserved.
//

import UIKit
import FMDB

/*
代码操作数据
    1.打开数据库
    2.如果没有表,创建表
    3.操作数据库
*/

/*
    FMDB常用3个类:
        1. FMDatabase: 表示一个数据库,和数据库的操作都是使用这个对象
        2. FMDatabaseQueue: 里面包含一个 FMDatabase 和 一个串行队列,用于多线程,可以保证数据库的数据不出问题
            inDatabase: 普通使用数据库
            inTransaction: 使用事务
        3. FMResultSet: 查询的结果集,所有查询的结果都是通过这个对象来获取的
*/

class SQLiteManager: NSObject {
    
    static let sharedManager: SQLiteManager = SQLiteManager()
    
    let dbQueue: FMDatabaseQueue
    
    override init() {
        // path: 数据库路径
        let dbPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! + "/statuses.sqlite"
        
        print("dbPath: \(dbPath)")
        
        // 如果没有数据库,会自动创建,并且会打开数据
        dbQueue = FMDatabaseQueue(path: dbPath)
        super.init()
        
        createTable("T_Status")
    }
    
    private func createTable(tableName: String) {
        // sql
        let sql = "CREATE TABLE IF NOT EXISTS \(tableName) (statusId INTEGER PRIMARY KEY, status TEXT, userId INTEGER, createTime TEXT DEFAULT (datetime('now', 'localtime')));"
        
        // 执行sql
        dbQueue.inDatabase { (db) -> Void in
            // 使用 FMDataBase来操作数据库
            // 当方法后面有 throws,说明这个方法会出异常
            // try! 不理会异常,出现问题就蹦了
            // 处理异常 do {} catch {}
            do {
                try db.executeUpdate(sql, values: [])
            } catch let error as NSError {
                // 如果真的出现异常就到这里面,程序还会正常执行
                print("出现异常: \(error)")
            }
        }
    }

}
